from django import http
from django.core.cache import cache
from django.shortcuts import render
from django.views import View
from apps.areas.models import Area
import logging

from utils.response_code import RETCODE

logger = logging.getLogger('django')

'''
前端逻辑
    省的信息不需要parent_id
    市, 区县的信息需要parent_id

后端逻辑
    1. 获取前端的parent_id
    2. 判断parent_id是否为None
    3. 如果为None, 则返回省的信息
    4. 如果不为None, 则返回市, 区县的信息

请求方式和路由
GET                 areas/
'''
# 定义一个类, 处理返回收货地址信息的业务
class AreaView(View):
    def get(self, request):
        # 1.获取前端的parent_id    这里的area_id是js中写死的
        parent_id = request.GET.get('area_id')
        # 2. 判断parent_id是否为None
        if not parent_id:

            # 读取省份缓存数据
            province_list = cache.get('province_list')
            if not province_list:

                try:
                    # 3. 如果为None, 则返回省的信息
                    province_model_list = Area.objects.filter(parent__isnull=True)
                    # 将对象列表转换为字典列表
                    province_list = []
                    for pro in province_model_list:
                        province_list.append({
                            'id':pro.id,
                            'name':pro.name
                        })
                except Exception as e:
                    logger.error(e)
                    return http.JsonResponse({'code': RETCODE.DBERR, 'errmsg': '省份数据错误'})

                # 储存省份缓存数据
                cache.set('province_list', province_list, 24 * 3600)

            # 返回省份数据
            return http.JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK',
                                      'province_list':province_list})
        else:

            # 读取市, 区县缓存数据
            sub_list = cache.get('sub_list_' + parent_id)
            if not sub_list:

                # 4. 如果不为None, 则返回市, 区县的信息
                try:
                    # 获取省的数据
                    parent_model = Area.objects.get(id=parent_id)
                    # 获取省下面的市, 区县数据
                    sub_model_list = parent_model.subs.all()
                    # 将对象列表转换为字典列表
                    sub_list = []
                    for sub in sub_model_list:
                        sub_list.append({
                            'id':sub.id,
                            'name':sub.name
                        })
                except Exception as e:
                    logger.error(e)
                    return http.JsonResponse({'code': RETCODE.DBERR, 'errmsg': '城市或区数据错误'})

            # 设置市, 区县的缓存数据
            cache.set('sub_list_' + parent_id, sub_list, 3600*24)

            return http.JsonResponse({'code': RETCODE.OK, 'errmsg': 'OK', 'subs': sub_list})


